package com.mygo.designPattern.behavioral.strategicDesignPattern;

import java.math.BigDecimal;

/**
 * 购物车类
 * 它维护一个折扣策略的引用，并在计算总价时使用该策略
 */
class ShoppingCart {
    // 折扣策略
    private DiscountStrategy discountStrategy;

    /**
     * 构造方法
     * 初始化购物车并设置其折扣策略
     * @param discountStrategy 折扣策略
     */
    public ShoppingCart(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    /**
     * 设置折扣策略
     * 允许在购物车已创建后更改折扣策略
     * @param discountStrategy 折扣策略
     */
    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    /**
     * 计算总价
     * 根据当前设置的折扣策略计算并返回商品的总价
     * @param price 商品原价
     * @return 折扣后的总价
     */
    public BigDecimal calculateTotal(BigDecimal price) {
        return discountStrategy.applyDiscount(price);
    }
}
